# 合并排序的数组
# 给定两个排序后的数组 A 和 B，其中 A 的末端有足够的缓冲空间容纳 B。 编写一个方法，将 B 合并入 A 并排序。
# 初始化 A 和 B 的元素数量分别为 m 和 n。
#

# 输入:
# A = [1,2,3,0,0,0], m = 3
# B = [2,5,6],       n = 3
# 输出: [1,2,2,3,5,6]
# https://leetcode-cn.com/problems/sorted-merge-lcci/


# 谜之跪了...
A = [1, 2, 3, 0, 0, 0]
m = 3
B = [2, 5, 6]
n = 3


A = A[:m]
A.extend(B)
A.sort()
print(A)

# 运行结果理论上是对的啊
# 但是判定非说我的输出是 [1,2,3,0,0,0]
# 难道是版本的问题之类的吗?
# 很迷...


A_2 = [1, 2, 3, 0, 0, 0]
m_2 = 3
B_2 = [2, 5, 6]
n_2 = 3
# 官方答案倒是更简单 两行
# 从运行效果来看我也不知道我错哪了...
A_2[m:] = B_2
A_2.sort()
print(A_2)


class Solution:
    def merge(self, A_3, m_3, B_3, n_3):
        """
        Do not return anything, modify A in-place instead.
        """
        A_3 = A_3[:m:]
        A_3.extend(B_3)
        A_3.sort()
        A_2.extend(B_3)


A_3 = [1, 2, 3, 0, 0, 0]
m_3 = 3
B_3 = [2, 5, 6]
n_3 = 3
test = Solution()
test.merge(A_3, m_3, B_3, n_3)
print("out")
print(A_3)


# 更正写法 A = A[:m] 改为下列写法会成功
# A[:] = A[:m]

# 复盘 :对切片操作的理解
# 切片操作返回是和被切片对象相同类型对象的副本
# 切片对于原对象的操作
# 在某个位置插入多个元素
a_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
a_list[3:3] = ['a', 'b', 'c']
# print(a_list)  # [0, 1, 2, 'a', 'b', 'c', 3, 4, 5, 6, 7, 8, 9]

# 在开始位置之前插入多个元素
b_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
b_list[:0] = ['a','b','c']
# print(b_list)   ['a', 'b', 'c', 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

# 替换多个元素
c_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
c_list[0:3] = ['a','b','c']
# print(c_list)   ['a', 'b', 'c', 3, 4, 5, 6, 7, 8, 9]


# 删除多个元素 (不推荐这种写法)
alist = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
del alist[3:6]
# print(alist)    [0, 1, 2, 6, 7, 8, 9]
